/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Dato.DAO;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author oscar
 */
public class PersistenceManager {
 
  public static final boolean DEBUG = true;
   private String URLPORDEFECTO=null;
    private static String NOMBREBD="TranServDB";
  
  private static final PersistenceManager singleton = new PersistenceManager();
  
  protected static EntityManagerFactory emf;
  
  public static PersistenceManager getInstance() {
    
    return singleton;
  }
  
  private PersistenceManager() {
      super();
  }
 
  public EntityManagerFactory getEntityManagerFactory() {
    
    if (emf == null)
      createEntityManagerFactory();
    return emf;
  }
  
  public void closeEntityManagerFactory() {
    
    if (emf != null) {
      emf.close();
      emf = null;
      if (DEBUG)
        System.out.println("n*** Persistence finished at " + new java.util.Date());
    }
  }
  
  private void createEntityManagerFactory() {
   
         if(emf==null){
             
           Map mapaConf=new HashMap();   
         //File separator ("/" on UNIX) Separador de los directorios (unix es /, windows es \). De todas formas java entiende cualquiera de ellos
        String fileSeparador=System.getProperty("file.separator");
        
        //Path separator (":" on UNIX) Cuando en una variable, por ejemplo PATH, ponemos varios valores, el separador en unix de estos path es : mientras que en windows es ;
        String pathSeparador=System.getProperty("path.separator");

   
        //si la url no se setea a un directorio por defecto le doy el directorio donde se ejecuta el programa
        if(URLPORDEFECTO==null){
        //dir padre donde ejecuto el programa      
        URLPORDEFECTO = System.getProperty("user.dir");
        }
        //agrego el nombre de la db
        URLPORDEFECTO=URLPORDEFECTO+fileSeparador+NOMBREBD;
        
        File fileDB=new File(URLPORDEFECTO);
        
        if(!fileDB.exists()){
         
            URLPORDEFECTO=URLPORDEFECTO+pathSeparador+"create=true";
          
            
        }
   
        System.out.println("url designada "+URLPORDEFECTO);        

        
        
        
        //Eclipselink
        /*Map mapaConf=new HashMap();
        mapaConf.put("javax.persistence.jdbc.url", "jdbc:derby:"+URLPORDEFECTO);
        mapaConf.put("javax.persistence.jdbc.password", "root");
        mapaConf.put("javax.persistence.jdbc.driver", "org.apache.derby.jdbc.EmbeddedDriver");
        mapaConf.put("javax.persistence.jdbc.user", "root");
*/
        
          //Hibernate
       
        
        mapaConf.put("hibernate.show_sql", "true");
        mapaConf.put("hibernate.format_sql", "false");
        
        mapaConf.put("hibernate.connection.url", "jdbc:derby:"+URLPORDEFECTO);
        mapaConf.put("hibernate.connection.username", "root");
        mapaConf.put("hibernate.connection.password", "root");

        emf = Persistence.createEntityManagerFactory("AplicacionTranservPU",mapaConf);
        
    
        
  
    if (DEBUG)
      System.out.println("n*** Persistence started at " + new java.util.Date());
    }
         
  }
}
